গুয়াভা (Guava) লাইব্রেরি Java প্রোগ্রামে ডেটা ভ্যালিডেশন (data validation) খুব সহজ করে তোলে। গুয়াভা বিশেষভাবে Preconditions
ক্লাসের মাধ্যমে ইনপুট ভ্যালিডেশন পরিচালনা করার সুযোগ দেয়, তবে এই লাইব্রেরিতে কিছু অতিরিক্ত ভ্যালিডেটরও রয়েছে যেগুলি বিশেষভাবে কার্যকরী। এই ভ্যালিডেটরগুলি ব্যবহার করে আপনি ইনপুট ডেটার সঠিকতা এবং কনসিস্টেন্সি নিশ্চিত করতে পারেন। এখানে গুয়াভা ভ্যালিডেটরের কিছু গুরুত্বপূর্ণ ক্লাস এবং তাদের ব্যবহার তুলে ধরা হলো।
গুয়াভা লাইব্রেরিতে একটি Validator
ক্লাস সরাসরি অন্তর্ভুক্ত করা না হলেও, কিছু ফিচার এবং ইউটিলিটি আছে যা বিভিন্ন ধরনের ভ্যালিডেশন (যেমন, Preconditions
, CharMatcher
, Range
ইত্যাদি) সম্পাদন করতে সাহায্য করে। এই ক্লাসগুলি সাধারণত ইভ্যালুয়েশন এবং ভ্যালিডেশন প্রক্রিয়ায় ব্যবহার করা হয়। নীচে আমরা গুয়াভার ভ্যালিডেটরের মূল ধারণাগুলি এবং ব্যবহারের উদাহরণ আলোচনা করব।
Preconditions
ক্লাসের বিভিন্ন মেথড (যেমন, checkNotNull()
, checkArgument()
, checkState()
) ইনপুট ভ্যালিডেশন সহজ করে তোলে। এই মেথডগুলির মাধ্যমে আপনি কোডের মধ্যে বিভিন্ন শর্ত পরীক্ষা করতে পারেন এবং যদি কোনো শর্ত পূরণ না হয়, তবে এটি ত্রুটি (exception) থ্রো করবে।
import com.google.common.base.Preconditions;
public class PreconditionsExample {
public static void main(String[] args) {
String username = null;
// checkNotNull() ব্যবহার করে null চেক করা
username = Preconditions.checkNotNull(username, "Username cannot be null");
}
}
এখানে, checkNotNull()
মেথড ব্যবহার করা হয়েছে যা নিশ্চিত করবে যে username
null নয়। যদি username
null হয়, তাহলে এটি NullPointerException
থ্রো করবে।
CharMatcher
একটি বিশেষ ক্লাস যা অক্ষরের ভ্যালিডেশন এবং ম্যানিপুলেশন করতে ব্যবহৃত হয়। এটি বিভিন্ন ধরনের অক্ষরের মেলা বা ম্যাচিংয়ের জন্য শক্তিশালী টুল সরবরাহ করে, যেমন: নির্দিষ্ট চরিত্রের উপস্থিতি চেক করা, অক্ষর পরিষ্কার করা, অথবা ভ্যালিড অক্ষর তালিকা তৈরি করা।
import com.google.common.base.CharMatcher;
public class CharMatcherExample {
public static void main(String[] args) {
String input = "Hello123";
// CharMatcher ডিগিট চেক করা
boolean hasDigit = CharMatcher.digit().matchesAnyOf(input);
System.out.println("Has digit: " + hasDigit); // true
}
}
এখানে, CharMatcher.digit().matchesAnyOf()
ব্যবহার করে আমরা যাচাই করছি যে স্ট্রিংটিতে কোনো ডিজিট আছে কিনা। এটি true
রিটার্ন করবে কারণ "Hello123"-এ ডিজিট রয়েছে।
Range
ক্লাসটি নির্দিষ্ট পরিসরের মধ্যে ভ্যালিডেশন পরিচালনা করতে ব্যবহৃত হয়। এটি সাধারণত সংখ্যার সীমা চেক করতে সাহায্য করে, যেমন কোন একটি সংখ্যার ভ্যালু নির্দিষ্ট পরিসরের মধ্যে আছে কিনা।
import com.google.common.collect.Range;
public class RangeExample {
public static void main(String[] args) {
int age = 25;
// Range ব্যবহার করে বয়সের পরিসর চেক করা
Range<Integer> validAgeRange = Range.closed(18, 65);
boolean isValidAge = validAgeRange.contains(age);
System.out.println("Is valid age: " + isValidAge); // true
}
}
এখানে, Range.closed()
ব্যবহার করা হয়েছে যা একটি বন্ধ পরিসর তৈরি করে। তারপর contains()
মেথডের মাধ্যমে যাচাই করা হয়েছে যে age
এই পরিসরের মধ্যে আছে কিনা। এটি true
রিটার্ন করবে কারণ 25 বয়স 18 থেকে 65 এর মধ্যে পড়ে।
গুয়াভা লাইব্রেরি নিজে সরাসরি কোনো কাস্টম ভ্যালিডেটরের সমাধান প্রদান না করলেও, আপনি নিজেই Preconditions
এবং অন্যান্য ইউটিলিটি মেথড ব্যবহার করে কাস্টম ভ্যালিডেশন তৈরি করতে পারেন। উদাহরণস্বরূপ, কোনো ইমেইল ঠিকানা বা ফোন নম্বরের সঠিকতা যাচাই করতে CharMatcher
বা Preconditions
এর সঙ্গে রেগুলার এক্সপ্রেশন ব্যবহার করা যেতে পারে।
import com.google.common.base.Preconditions;
import com.google.common.base.CharMatcher;
public class CustomValidatorExample {
public static void main(String[] args) {
String phoneNumber = "+1234567890";
// Phone number validation
Preconditions.checkArgument(CharMatcher.digit().matchesAllOf(phoneNumber), "Invalid phone number format");
System.out.println("Valid phone number: " + phoneNumber);
}
}
এখানে, Preconditions.checkArgument()
এবং CharMatcher.digit().matchesAllOf()
ব্যবহার করে ফোন নম্বরের ভ্যালিডেশন করা হয়েছে, যা নিশ্চিত করবে যে ফোন নম্বরে শুধুমাত্র ডিজিট থাকবে।
গুয়াভা (Guava) লাইব্রেরি ডেটা ভ্যালিডেশনের জন্য বিভিন্ন শক্তিশালী টুল সরবরাহ করে। Preconditions
ইনপুট ভ্যালিডেশন করার জন্য খুবই কার্যকরী, CharMatcher
অক্ষরের সাথে সম্পর্কিত ভ্যালিডেশন এবং ম্যানিপুলেশন করতে সাহায্য করে, এবং Range
ক্লাসটি সংখ্যার পরিসর যাচাই করতে ব্যবহৃত হয়। এই ফিচারগুলো আপনার Java অ্যাপ্লিকেশনগুলিতে ডেটা ভ্যালিডেশনকে দ্রুত এবং কার্যকরীভাবে সম্পাদন করতে সহায়ক।
Guava লাইব্রেরি Java-তে ইনপুট ভ্যালিডেশন সহজ করতে Validators
ক্লাসের মতো শক্তিশালী টুল সরবরাহ করে। ইনপুট ভ্যালিডেশন এমন একটি প্রক্রিয়া যেখানে আমরা নিশ্চিত করি যে ব্যবহারকারী বা সিস্টেমের কাছ থেকে পাওয়া ইনপুট সঠিক এবং নির্দিষ্ট শর্ত পূর্ণ করে। Guava লাইব্রেরি ইনপুট ভ্যালিডেশনের জন্য Preconditions
এবং অন্যান্য ইউটিলিটি ক্লাস সরবরাহ করে, যা ডেভেলপারদের এই কাজ সহজে করতে সহায়তা করে।
Guava এর Preconditions
এবং Validators
ক্লাসগুলো মূলত ইনপুট ভ্যালিডেশন এবং শর্ত যাচাই করার জন্য ব্যবহৃত হয়। এগুলি ব্যবহার করে আপনি সহজেই ইনপুট যাচাই করতে পারেন এবং ইনপুটের ভুল থাকলে ব্যতিক্রম (exception) ছুড়ে তা ধরতে পারেন।
Preconditions
ক্লাস: ইনপুট ভ্যালিডেশনGuava লাইব্রেরির Preconditions
ক্লাসটি প্রধানত বিভিন্ন ইনপুট যাচাই করার জন্য ব্যবহৃত হয়। এটি চেক করে যে ইনপুট কিছু নির্দিষ্ট শর্ত পূর্ণ করছে কিনা। যদি শর্ত পূর্ণ না হয়, তবে এটি একটি ব্যতিক্রম (exception) ছুঁড়ে।
Preconditions
ক্লাসের কিছু জনপ্রিয় মেথড:checkArgument()
: আর্গুমেন্ট (যেমন মেথডের ইনপুট প্যারামিটার) যাচাই করতে ব্যবহৃত হয়।checkNotNull()
: কোনো অবজেক্ট বা ভ্যালু null
না হওয়া নিশ্চিত করতে ব্যবহৃত হয়।checkState()
: অবস্থা (state) যাচাই করতে ব্যবহৃত হয়।checkElementIndex()
: ইনডেক্সের সীমানা যাচাই করতে ব্যবহৃত হয়।Preconditions
ব্যবহার করে ইনপুট ভ্যালিডেশনcheckArgument()
ব্যবহার করাধরা যাক, একটি মেথডে আপনি একটি বয়েস (age) গ্রহণ করছেন এবং চাইছেন যে এটি একটি পজিটিভ মান হোক:
import com.google.common.base.Preconditions;
public class InputValidationExample {
public static void main(String[] args) {
int age = -5;
// checkArgument() ব্যবহার করে বয়েস যাচাই করা
Preconditions.checkArgument(age > 0, "Age must be positive: %s", age);
}
}
checkArgument()
মেথডটি যাচাই করেছে যে বয়েস (age) পজিটিভ কিনা। যদি বয়েস পজিটিভ না হয়, তবে এটি একটি IllegalArgumentException
ছোড়বে এবং ত্রুটির বার্তা প্রদর্শন করবে।Exception in thread "main" java.lang.IllegalArgumentException: Age must be positive: -5
checkNotNull()
ব্যবহার করাএকটি সাধারণ ইনপুট ভ্যালিডেশন উদাহরণ যেখানে আমরা null
চেক করছি:
import com.google.common.base.Preconditions;
public class InputValidationExample {
public static void main(String[] args) {
String name = null;
// checkNotNull() ব্যবহার করে নাম যাচাই করা
Preconditions.checkNotNull(name, "Name cannot be null");
}
}
checkNotNull()
মেথডটি নিশ্চিত করে যে নাম (name) null
না হয়। যদি এটি null
হয়, তাহলে এটি একটি NullPointerException
ছোড়ে এবং ত্রুটির বার্তা দেখায়।Exception in thread "main" java.lang.NullPointerException: Name cannot be null
checkState()
ব্যবহার করাধরা যাক, একটি প্রোগ্রামে আমরা একটি অবস্থা যাচাই করতে চাই, যেমন একটি ফ্ল্যাগ চেক করা যে এটি সক্রিয় (active) অবস্থায় রয়েছে কিনা:
import com.google.common.base.Preconditions;
public class InputValidationExample {
public static void main(String[] args) {
boolean isActive = false;
// checkState() ব্যবহার করে অবস্থা যাচাই করা
Preconditions.checkState(isActive, "The system must be active to perform this operation");
}
}
checkState()
মেথডটি যাচাই করেছে যে isActive
ফ্ল্যাগটি true
কিনা। যদি এটি false
হয়, তাহলে একটি IllegalStateException
ছোড়া হবে।Exception in thread "main" java.lang.IllegalStateException: The system must be active to perform this operation
Preconditions
ব্যবহার করা উচিত?Preconditions
ব্যবহার করে আপনি কোডে ইনপুট ভ্যালিডেশন খুবই পরিষ্কার ও সহজভাবে করতে পারেন।Preconditions
মেথডের মাধ্যমে আপনার ইনপুট যাচাই করার সময় যে ব্যতিক্রমটি ছোড়া হয়, তা সহজে হ্যান্ডল করা যায়।Guava লাইব্রেরির Preconditions
ক্লাস ইনপুট ভ্যালিডেশনের জন্য একটি খুবই শক্তিশালী এবং কার্যকরী টুল সরবরাহ করে। এটি বিভিন্ন শর্ত যাচাই করতে সাহায্য করে, যেমন আর্গুমেন্ট যাচাই, null
চেক, অবস্থা যাচাই ইত্যাদি। এই ক্লাসটি ব্যবহার করে আপনি আপনার কোডের মান বজায় রাখতে পারবেন এবং ইনপুট সম্পর্কিত ত্রুটিগুলি সহজেই ধরতে পারবেন।
গুয়াভা (Guava) লাইব্রেরি Validators এবং Preconditions ক্লাসগুলোর মাধ্যমে ইনপুট ভ্যালিডেশন এবং ভ্যালিডেশন ফেইল হওয়া অবস্থায় উপযুক্ত ত্রুটি জানানোর প্রক্রিয়াটিকে অনেক সহজ এবং কার্যকরী করে তোলে। যেখানে Preconditions ইনপুট চেক করার জন্য সহজ এবং দ্রুত একটি পদ্ধতি সরবরাহ করে, সেখানে Validators আরও বিস্তারিত ও কাস্টম চেকিংয়ের সুযোগ দেয়।
Preconditions এবং Validators এর মধ্যে সমন্বয় ব্যবহারের মাধ্যমে আপনি কোডের স্থিতিশীলতা, নিরাপত্তা, এবং পাঠযোগ্যতা বৃদ্ধি করতে পারেন।
Preconditions ক্লাসটি গুয়াভা লাইব্রেরির একটি গুরুত্বপূর্ণ অংশ, যা ইনপুট ভ্যালিডেশন এবং প্রোগ্রাম চালানোর শর্ত যাচাই করার জন্য ব্যবহৃত হয়। এটি আপনার কোডে শর্তগুলির যথাযথতা নিশ্চিত করে এবং শর্ত পূর্ণ না হলে একটি ত্রুটি ছুড়ে দেয়। প্রধানত এটি checkArgument()
, checkNotNull()
, checkState()
ইত্যাদি মেথড দ্বারা কাজ করে।
Validators সাধারণত জাভা প্রোগ্রামগুলিতে ইনপুট যাচাই বা মান যাচাই করার জন্য ব্যবহৃত হয়। এটি বিশেষ করে জটিল বা কাস্টম ভ্যালিডেশন চেক করার জন্য উপযোগী। এই প্রক্রিয়া ইনপুট বা ডেটার মান যাচাই করে এবং যে কোনও ভুল বা অযাচিত মান চিহ্নিত করতে সাহায্য করে।
আপনি যখন Preconditions এবং Validators একসঙ্গে ব্যবহার করবেন, তখন আপনি প্রোগ্রামের মান যাচাই করতে দ্রুত এবং সহজ পদ্ধতি পাবেন। Preconditions ইনপুটের প্রাথমিক ভ্যালিডেশন নিশ্চিত করতে পারে এবং তারপর Validators আরো বিস্তারিত বা কাস্টম ভ্যালিডেশন চেক করতে পারে।
ধরা যাক, আপনি একটি ইউজার রেজিস্ট্রেশন ফর্ম তৈরি করছেন যেখানে ইউজার নাম, বয়স এবং ইমেইল প্রদান করবে। আপনি Preconditions.checkNotNull()
দিয়ে প্রাথমিক চেক করতে পারেন এবং তারপর Validators
ব্যবহার করে আরও গভীর ভ্যালিডেশন করবেন।
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.Iterables;
public class GuavaValidationExample {
public static void main(String[] args) {
String name = "John Doe";
Integer age = 25;
String email = "johndoe@example.com";
// Preconditions দ্বারা প্রাথমিক ভ্যালিডেশন
Preconditions.checkNotNull(name, "Name cannot be null");
Preconditions.checkArgument(age >= 18, "Age must be 18 or older");
// কাস্টম ভ্যালিডেশন: নামের জন্য খালি স্ট্রিং অনুমোদিত নয়
validateName(name);
// কাস্টম ভ্যালিডেশন: ইমেইল ঠিক আছে কিনা
validateEmail(email);
System.out.println("User registration successful!");
}
// কাস্টম ভ্যালিডেশন: নাম চেক করা
public static void validateName(String name) {
Preconditions.checkArgument(!Strings.isNullOrEmpty(name), "Name cannot be empty or null");
}
// কাস্টম ভ্যালিডেশন: ইমেইল ঠিক আছে কিনা
public static void validateEmail(String email) {
Preconditions.checkArgument(email.contains("@"), "Invalid email address");
}
}
NullPointerException
ছুড়ে দেবে।IllegalArgumentException
ছুড়ে দেবে।IllegalArgumentException
ছুড়ে দেবে।IllegalArgumentException
ছুড়ে দেবে।যতটা সম্ভব Preconditions ব্যবহার করে সহজ ভ্যালিডেশন করা ভাল, কিন্তু যখন আপনার প্রয়োজন আরও জটিল বা কাস্টম ভ্যালিডেশন, তখন আপনি কাস্টম মেথড ব্যবহার করতে পারেন।
উদাহরণস্বরূপ:
public class CustomValidators {
// একটি নম্বরের সঠিকতা যাচাই
public static boolean isValidPhoneNumber(String phoneNumber) {
return phoneNumber.matches("^[0-9]{10}$"); // নিশ্চিত করুন যে এটি 10 ডিজিটের নম্বর
}
}
এখানে isValidPhoneNumber
মেথডটি চেক করবে যে ফোন নম্বরটি সঠিক ফরম্যাটে আছে কিনা। আপনি এমন কাস্টম চেকিং করতে চাইলে Preconditions এর সাথে এটি সংযুক্ত করতে পারেন।
গুয়াভা লাইব্রেরির Preconditions এবং Validators একসঙ্গে ব্যবহারের মাধ্যমে আপনি ইনপুট যাচাই এবং ভ্যালিডেশন প্রক্রিয়াগুলোকে আরও কার্যকর এবং স্থিতিশীল করতে পারবেন। Preconditions ফাস্ট ইনপুট চেক করতে সাহায্য করে এবং Validators কাস্টম ভ্যালিডেশন এবং আরও বিস্তারিত চেক করার জন্য ব্যবহৃত হয়। এই দুইটি একসঙ্গে ব্যবহার করলে আপনার প্রোগ্রামের নিরাপত্তা এবং স্থিতিশীলতা নিশ্চিত হবে।
Guava লাইব্রেরিতে বিভিন্ন validation সম্পর্কিত সরঞ্জাম পাওয়া যায়, কিন্তু কখনো কখনো ডেভেলপারদের কাস্টম ভ্যালিডেশন লজিক প্রয়োগ করার প্রয়োজন পড়ে। Guava লাইব্রেরি Preconditions এবং Validation এর মতো টুল সরবরাহ করে, যা দিয়ে আপনি সহজেই কাস্টম ভ্যালিডেটর তৈরি করতে পারেন।
কাস্টম ভ্যালিডেটর তৈরি করার মাধ্যমে আপনি নিজস্ব শর্ত বা নিয়ম অনুসারে ইনপুট ভ্যালিডেশন করতে পারেন, যা গ্যাস্ট বা প্লাগঅ্যাবল হয়ে কাজ করবে।
Guava লাইব্রেরি Preconditions
ক্লাস এবং Java Bean Validation API (যেমন @NotNull
, @Size
, ইত্যাদি) ব্যবহার করে কাস্টম ভ্যালিডেটর তৈরি করা যেতে পারে। আমরা এখানে Preconditions এর মাধ্যমে কাস্টম ভ্যালিডেটর তৈরি করার একটি উদাহরণ দেখব।
Guava লাইব্রেরির Preconditions ক্লাসটি সাধারণত প্রি-কন্ডিশন চেক করার জন্য ব্যবহৃত হয়, কিন্তু এটি কাস্টম কন্ডিশন চেকের জন্যও ব্যবহার করা যেতে পারে। আপনার প্রয়োজন অনুযায়ী আপনি শর্ত ঠিক করতে পারেন এবং তাতে যদি কিছু ভুল হয়, তবে IllegalArgumentException বা অন্যান্য ত্রুটি ছোড়া যায়।
এখানে একটি কাস্টম ভ্যালিডেটর তৈরি করা হয়েছে যা সুনির্দিষ্ট শর্তে ইনপুট ভ্যালু যাচাই করে এবং ত্রুটি ছোড়ে:
import com.google.common.base.Preconditions;
public class CustomValidatorExample {
// Custom validator to check if a string is not empty and has a minimum length
public static void validateUsername(String username) {
// Validate that the username is not null or empty
Preconditions.checkArgument(username != null && !username.isEmpty(), "Username cannot be null or empty.");
// Validate that the username has at least 5 characters
Preconditions.checkArgument(username.length() >= 5, "Username must be at least 5 characters long.");
}
public static void main(String[] args) {
try {
// Validate a username
validateUsername("john");
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
try {
// Validate another username
validateUsername("johndoe");
System.out.println("Username is valid.");
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Error: Username must be at least 5 characters long.
Username is valid.
import com.google.common.base.Preconditions;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EmailValidator {
// Validate email using regular expression
public static void validateEmail(String email) {
// Validate if email is not null or empty
Preconditions.checkArgument(email != null && !email.isEmpty(), "Email cannot be null or empty.");
// Regular expression to validate email format
String emailRegex = "^[A-Za-z0-9+_.-]+@(.+)$";
Pattern pattern = Pattern.compile(emailRegex);
Matcher matcher = pattern.matcher(email);
// Check if email matches the regular expression
Preconditions.checkArgument(matcher.matches(), "Invalid email format.");
}
public static void main(String[] args) {
try {
validateEmail("invalid-email");
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
try {
validateEmail("valid@example.com");
System.out.println("Email is valid.");
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
Error: Invalid email format.
Email is valid.
Guava লাইব্রেরির সাথে আপনি Java Bean Validation API (JSR 303) ব্যবহার করে কাস্টম ভ্যালিডেটর তৈরি করতে পারেন, যেখানে আপনি @Constraint অ্যানোটেশন এবং ConstraintValidator ব্যবহার করতে পারেন।
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
// Custom annotation
@Constraint(validatedBy = AgeValidator.class)
@Target({ ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidAge {
String message() default "Invalid age";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
// Validator implementation
class AgeValidator implements ConstraintValidator<ValidAge, Integer> {
@Override
public void initialize(ValidAge constraintAnnotation) {}
@Override
public boolean isValid(Integer age, ConstraintValidatorContext context) {
// Check if age is greater than or equal to 18
return age != null && age >= 18;
}
}
// Using custom annotation
public class CustomValidatorExample {
@ValidAge
private Integer age;
public static void main(String[] args) {
CustomValidatorExample example = new CustomValidatorExample();
example.age = 16;
// Perform validation (this needs a validation framework like Hibernate Validator)
}
}
কাস্টম ভ্যালিডেটর ব্যবহার করার সময় আপনি নিজস্ব ত্রুটি বার্তা প্রদান করতে পারেন, যা ব্যবহারকারীদের জন্য আরও স্পষ্ট এবং অর্থবোধক হবে।
Guava লাইব্রেরির মাধ্যমে কাস্টম ভ্যালিডেটর তৈরি করে আপনি সহজে ইনপুট ভ্যালিডেশন করতে পারেন, যা আপনার কোডের গুণগত মান বাড়ায় এবং ত্রুটি চেকিংয়ের প্রক্রিয়াকে আরও কার্যকর করে তোলে।
Guava লাইব্রেরি input validation এর জন্য শক্তিশালী এবং কার্যকরী পদ্ধতি সরবরাহ করে। Java প্রোগ্রামিংয়ে ইনপুট যাচাইয়ের জন্য Guava-এর Preconditions
ক্লাসটি খুবই জনপ্রিয়, যা কোডে শর্ত যাচাই করার একটি নিরাপদ এবং সহজ পদ্ধতি প্রদান করে। এটি প্রোগ্রামে null checks, range checks, এবং অন্যান্য বিভিন্ন শর্ত যাচাই করার জন্য ব্যবহৃত হয়।
এখানে Guava-র ইনপুট ভ্যালিডেশন ব্যবহারের জন্য কিছু best practices আলোচনা করা হলো:
Guava এর Preconditions
ক্লাসটি ইনপুট যাচাইয়ের জন্য খুবই কার্যকরী। এটি ইনপুটের শর্ত পরীক্ষা করে এবং যদি কোনো শর্ত ভঙ্গ হয়, তাহলে একটি RuntimeException
বা নির্দিষ্ট Exception নিক্ষেপ করে।
checkArgument()
এই মেথডটি ব্যবহারকারীর আর্গুমেন্ট চেক করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে আর্গুমেন্টটি সঠিক শর্তের মধ্যে পড়ে।
import com.google.common.base.Preconditions;
public class InputValidationExample {
public static void main(String[] args) {
int age = -5;
Preconditions.checkArgument(age > 0, "Age must be positive: %s", age);
}
}
Best Practice: যখন কোনো আর্গুমেন্টের মান অনুমোদিত সীমার বাইরে চলে যায়, তখন checkArgument()
ব্যবহার করুন, যেমন এখানে age
মানটি নেতিবাচক হলে এটি একটি IllegalArgumentException
ছুঁড়ে দেবে।
checkNotNull()
checkNotNull()
মেথডটি null চেক করতে ব্যবহৃত হয় এবং এটি নিশ্চিত করে যে কোনো ভ্যালু null নয়।
import com.google.common.base.Preconditions;
public class NullCheckExample {
public static void main(String[] args) {
String name = null;
Preconditions.checkNotNull(name, "Name cannot be null");
}
}
Best Practice: যদি আপনি কোনো অবজেক্ট বা ভ্যালু ব্যবহার করতে চান, এবং তা null হতে পারবে না, তবে checkNotNull()
ব্যবহার করুন। এটি আপনার কোডে null pointer exceptions থেকে রক্ষা করবে।
checkState()
checkState()
মেথডটি একটি অবজেক্টের বর্তমান অবস্থা যাচাই করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে অবজেক্টটি একটি সঠিক অবস্থায় আছে, যাতে এর পরবর্তী ব্যবহারটি সম্ভব হয়।
import com.google.common.base.Preconditions;
public class StateValidationExample {
private boolean isStarted = false;
public void start() {
Preconditions.checkState(!isStarted, "Service is already started");
isStarted = true;
}
}
Best Practice: যখন কোনো অবজেক্ট বা সিস্টেম একটি নির্দিষ্ট অবস্থায় না থাকলে, তখন checkState()
ব্যবহার করুন। উদাহরণস্বরূপ, যদি কোনো সার্ভিস ইতিমধ্যে শুরু হয়ে থাকে, তবে এটি পুনরায় শুরু হওয়া থেকে রোধ করতে পারেন।
checkArgument()
Guava এর checkArgument()
মেথডটি range validation এর জন্যও ব্যবহার করা যায়, যেখানে একটি মান সীমার মধ্যে পড়ছে কিনা তা নিশ্চিত করতে হয়।
import com.google.common.base.Preconditions;
public class RangeValidationExample {
public static void main(String[] args) {
int score = 105;
Preconditions.checkArgument(score >= 0 && score <= 100, "Score must be between 0 and 100: %s", score);
}
}
Best Practice: যখন কোনো মান একটি নির্দিষ্ট পরিসীমার মধ্যে পড়তে হবে, তখন checkArgument()
ব্যবহার করুন, যেমন এখানে score ০ থেকে ১০০ এর মধ্যে থাকতে হবে।
Guava-তে Preconditions
ক্লাসের সকল মেথডে custom error message প্রদান করা যায়, যা ডিবাগিং এবং সমস্যা সমাধানে সহায়ক।
import com.google.common.base.Preconditions;
public class CustomErrorMessageExample {
public static void main(String[] args) {
String password = "123";
Preconditions.checkArgument(password.length() >= 6, "Password must be at least 6 characters long: %s", password);
}
}
Best Practice: Preconditions
ব্যবহার করার সময় custom error messages ব্যবহার করুন যাতে ব্যবহারকারী বা ডেভেলপার বুঝতে পারে কোন শর্ত ভঙ্গ হয়েছে এবং কেন এটি ঘটেছে।
অপর্যাপ্ত বা redundant checks পরিহার করা উচিত। Preconditions
ক্লাস ব্যবহারে একাধিক একই ধরণের চেক পুনরায় করতে যাবেন না, যেগুলি ইতিমধ্যে অন্য মেথডে চেক হয়েছে।
// Bad Practice: Redundant checks
Preconditions.checkNotNull(name, "Name cannot be null");
Preconditions.checkArgument(name.length() > 0, "Name must not be empty");
Best Practice: ইনপুট যাচাইয়ের ক্ষেত্রে, যদি আপনি null check বা empty check ইতিমধ্যে করেছেন, তাহলে অন্য কোথাও একই ধরনের চেক করা এড়িয়ে চলুন।
কখনও কখনও custom validation logic প্রয়োজন হতে পারে যা Guava সরাসরি সমর্থন করে না। এর জন্য আপনি নিজের কাস্টম শর্ত তৈরি করে তা checkArgument()
বা checkState()
এর মধ্যে ব্যবহার করতে পারেন।
import com.google.common.base.Preconditions;
public class CustomValidationExample {
public static void main(String[] args) {
String username = "admin123";
Preconditions.checkArgument(username.matches("^[a-zA-Z0-9]+$"), "Username must be alphanumeric: %s", username);
}
}
Best Practice: যখন আপনার ইনপুটের জন্য বিশেষ ধরনের শর্ত প্রয়োজন (যেমন regex চেক), তখন custom validation logic ব্যবহার করতে পারেন।
Guava-র Preconditions
ক্লাস exceptions দ্রুত এবং দক্ষভাবে ফেলে, যা কোডের পারফরম্যান্স উন্নত করতে সহায়ক। তবে, যদি আপনি checked exceptions ব্যবহার করছেন, তবে সেগুলিকে try-catch ব্লকের মধ্যে হ্যান্ডেল করুন।
import com.google.common.base.Preconditions;
import java.io.IOException;
public class EfficientExceptionHandling {
public static void main(String[] args) {
try {
Preconditions.checkArgument(false, "This will throw an exception");
} catch (IllegalArgumentException e) {
System.out.println("Handled exception: " + e.getMessage());
}
}
}
Best Practice: Preconditions
ব্যবহারের মাধ্যমে exceptions হ্যান্ডলিং সহজ করুন এবং ভুল ইনপুটের কারণে পোগ্রাম ক্র্যাশ হওয়া থেকে রক্ষা করুন।
Guava লাইব্রেরি Preconditions
ক্লাসের মাধ্যমে input validation সহজ ও কার্যকরী করা যায়। এটি কোডে null checks, range validation, state validation, এবং custom validations করতে সহায়ক। Best practices অনুসরণ করলে আপনার কোড নিরাপদ, পরিষ্কার, এবং রক্ষণাবেক্ষণে সহজ হবে। Preconditions ব্যবহার করার সময় কাস্টম এরর মেসেজ এবং উপযুক্ত exceptions নিক্ষেপ করা নিশ্চিত করুন।
Read more